#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>

#define High 25  //定义游戏画面尺寸
#define Width 50
//函数外全局变量定义
int cells[High][Width];

void gotoxy(int x,int y)  //光标移动到（x,y)位置
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos);
}

void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info = {1,0};  //第二个值为0表示影藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

void startup()                  //数据初始化
{
	int i,j;
	for(i=0;i<High;i++)
		for(j=0;j<Width;j++)
			cells[i][j]=rand()%2;

	HideCursor(); //影藏光标
}
void show()          //显示画面
{
	gotoxy(0,0);//光标移动到原点位置，以下重画清屏
	int i,j;
	for(i=0;i<High;i++)
	{
		for(j=0;j<Width;j++)
		{
			if(cells[i][j]==1)
				printf("*");
			else
				printf(" ");
		}
		printf("\n");
	}
}
void updateWithoutInput()  //与用户输入无关的更新
{
	int i,j;
	int tempCells[High][Width];  //临时存储的二维数组
	for(i=0;i<High;i++)	
		for(j=0;j<Width;j++)
			tempCells[i][j] = cells[i][j];

	int NeighburNumber = 0;

	for(i=1;i<High-1;i++)
	{
		for(j=1;j<Width-1;j++)
		{
			NeighburNumber=cells[i-1][j-1]+cells[i-1][j]+cells[i-1][j+1]
							+cells[i][j-1]+cells[i][j]+cells[i][j+1]
							+cells[i+1][j-1]+cells[i+1][j]+cells[i+1][j+1];
			if(NeighburNumber==3)
				tempCells[i][j] = 1;
			else if(NeighburNumber==2 || NeighburNumber==4)
				tempCells[i][j] = cells[i][j];
			else
				tempCells[i][j] = 0;

		}
	}
	for(i=0;i<High;i++)	
		for(j=0;j<Width;j++)
			 cells[i][j] = tempCells[i][j];
	Sleep(70);
}
void updateWithInput()    //与用户输入有关的更新
{
	char input;
	if(kbhit())//当按键时执行
	{
		
	}
	
}

int main()
{
	
	startup(); //数据初始化
	
	while(1)//游戏循环执行
	{
		show();         //显示画面
		updateWithoutInput(); //与用户输入无关的更新
		updateWithInput();   //与用户输入有关的更新
	}
	return 0;
}